/*
 * Atoms.cpp
 *
 *  Created on: May 20, 2011
 *      Author: marchi
 */
#include "Atoms.h"

Atoms::Atoms(){
	nr=0;
	x=NULL;
}
Atoms::Atoms(const int a, const rvec * f) {
	nr=a;
	x=new rvec [nr];
	for(int i=0;i<a;i++) {
		x[i][0]=f[i][0];
		x[i][1]=f[i][1];
		x[i][2]=f[i][2];
	}
}
Atoms::Atoms(const Atoms & y) {
	nr=y.nr;
	x=new rvec [y.nr];
	for(int i=0;i<nr;i++) {
		x[i][0]=y.x[i][0];
		x[i][1]=y.x[i][1];
		x[i][2]=y.x[i][2];
	}
}

Atoms::~Atoms() {
	delete [] x;
	nr=0;
}

Atoms & Atoms::operator=(const Atoms & y){
	try{
		if(nr != y.nr) throw "Cannot copy Atoms of different size ";
	}
	catch(const char * s){
		std::cout << s << std::endl;
		exit(1);
	}
	for(int i=0;i<nr;i++) {
		x[i][0]=y.x[i][0];
		x[i][1]=y.x[i][1];
		x[i][2]=y.x[i][2];
	}
	return *this;
}
Atoms & Atoms::operator=(const real a){
	for(int i=0;i<nr;i++) {
		x[i][0]=a;
		x[i][1]=a;
		x[i][2]=a;
	}
	return *this;
}
void Atoms::Rot(const rvec co[DIM]){
	rvec t;
	for(int i=0;i<nr;i++){
		for(int o=0;o<DIM;o++) t[o]=co[o][0]*x[i][0]+co[o][1]*x[i][1]+co[o][2]*x[i][2];
		for(int o=0;o<DIM;o++) x[i][o]=t[o];
	}
}
void Atoms::Tra(const rvec y){
	for(int i=0;i<nr;i++)
		for(int o=0;o<DIM;o++) x[i][o]+=y[o];
}
